package com.zzyl.common.ai;

import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.core.auth.Auth;
import com.baidubce.qianfan.model.chat.ChatResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
@Slf4j
public class AIModelInvoker {

    @Autowired
    private BaiduAIProperties baiduAIProperties;

    public String qianfanInvoker(String prompt) {

        Map messageMap = Map.of("role", "user", "content",prompt);
        List messages = List.of(messageMap);
//        先把body里面的数据写完
        Map bodyMap = new HashMap<>();
        bodyMap.put("model", "ernie-4.5-turbo-latest");
        bodyMap.put("max_output_tokens",2000);
        bodyMap.put("messages",messages);

        String body = HttpUtil.createRequest(Method.POST, "https://qianfan.baidubce.com/v2/chat/completions")
                //设置请求头
                .header("Authorization", "Bearer bce-v3/ALTAK-lDIsryCHTL8jf5A3XOnU8/b9d5043649a1ef920498816d1914cdeddf85f6a9")
                .body(JSONUtil.toJsonStr(bodyMap))
                .execute().body();
        //把json字符串转成对象
        JSONObject jsonObject = JSONUtil.parseObj(body);
        String content = jsonObject.getByPath("choices[0].message.content", String.class);
        // content =   "```json\n{\n\t\"totalCheckDate\": \"2023-10-10\",\n\t\"healthAssessment\": {\n\t\t\"riskLevel\": \"risk\",\n\t\t\"healthIndex\": 75.50\n\t},\n\t\"abnormalData\": [\n\t\t{\n\t\t\t\"conclusion\": \"心率略快，偶发早搏，皮肤弹性差，四肢末梢凉，提示可能的循环问题\",\n\t\t\t\"examinationItem\": \"心率\",\n\t\t\t\"result\": \"92次/分\",\n\t\t\t\"referenceValue\": \"\u003c100（正常成人静息心率）\",\n\t\t\t\"unit\": \"次/分\",\n\t\t\t\"interpret\": \"心率略快可能由多种因素引起，包括但不限于焦虑、运动、药物副作用或潜在的心脏问题。偶发早搏可能是心脏电活动异常的表现。皮肤弹性差和四肢末梢凉可能与血液循环不良有关。\",\n\t\t\t\"advice\": \"建议进行心电图检查和血管功能评估，以进一步了解心脏和血管的健康状况。同时，保持健康的生活方式，包括规律作息、适量运动和健康饮食。\"\n\t\t},\n\t\t{\n\t\t\t\"conclusion\": \"视力下降，符合老视特征\",\n\t\t\t\"examinationItem\": \"视力\",\n\t\t\t\"result\": \"左眼0.3，右眼0.4\",\n\t\t\t\"referenceValue\": \"正常视力应接近1.0\",\n\t\t\t\"unit\": \"-\",\n\t\t\t\"interpret\": \"视力下降可能是老视（老花眼）的表现，这是随着年龄增长而出现的正常生理现象。\",\n\t\t\t\"advice\": \"建议定期复查视力，并考虑配戴老花镜以改善视力。\"\n\t\t},\n\t\t{\n\t\t\t\"conclusion\": \"口腔粘膜轻微炎症，唇部干燥脱屑，牙齿部分缺失伴有较多牙石，牙周炎及牙龈退缩\",\n\t\t\t\"examinationItem\": \"口腔检查\",\n\t\t\t\"result\": \"口腔粘膜轻微炎症，唇部干燥脱屑，牙齿部分缺失，余牙石较多，牙周炎，牙龈退缩\",\n\t\t\t\"referenceValue\": \"口腔粘膜无炎症，唇部湿润，牙齿完整无牙石，牙周健康\",\n\t\t\t\"unit\": \"-\",\n\t\t\t\"interpret\": \"口腔粘膜炎症和唇部干燥脱屑可能与口腔卫生不良、缺水或维生素缺乏有关。牙齿部分缺失、牙石和牙周炎是口腔健康问题的表现，可能导致牙齿松动和脱落。\",\n\t\t\t\"advice\": \"建议口腔科进一步检查和治疗，包括清洁牙齿、治疗牙周炎和补充必要的维生素。\"\n\t\t},\n\t\t{\n\t\t\t\"conclusion\": \"轻度脂肪肝可能\",\n\t\t\t\"examinationItem\": \"肝脏B超\",\n\t\t\t\"result\": \"肝脏实质回声略粗糙\",\n\t\t\t\"referenceValue\": \"肝脏实质回声均匀\",\n\t\t\t\"unit\": \"-\",\n\t\t\t\"interpret\": \"轻度脂肪肝可能与肥胖、高脂饮食、缺乏运动或酒精摄入过多有关。\",\n\t\t\t\"advice\": \"建议调整饮食，减少高脂食物摄入，增加有氧运动，限制酒精摄入，并定期复查肝脏B超。\"\n\t\t},\n\t\t{\n\t\t\t\"conclusion\": \"胆囊壁毛糙，考虑慢性胆囊炎可能\",\n\t\t\t\"examinationItem\": \"胆囊B超\",\n\t\t\t\"result\": \"胆囊壁毛糙\",\n\t\t\t\"referenceValue\": \"胆囊壁光滑\",\n\t\t\t\"unit\": \"-\",\n\t\t\t\"interpret\": \"胆囊壁毛糙可能是慢性胆囊炎的表现，与胆囊内结石、感染或胆汁淤积有关。\",\n\t\t\t\"advice\": \"建议进一步检查胆囊功能，如有必要，进行胆囊炎的治疗。同时，保持低脂饮食，避免暴饮暴食。\"\n\t\t},\n\t\t{\n\t\t\t\"conclusion\": \"脾轻度增大\",\n\t\t\t\"examinationItem\": \"脾脏B超\",\n\t\t\t\"result\": \"脾轻度增大\",\n\t\t\t\"re
        content = content.replace("```json", "");
        content = content.replace("```", "");

//        旧的
//        System.out.println(prompt);
//        Qianfan qianfan = new Qianfan(Auth.TYPE_OAUTH, baiduAIProperties.getAccessKey(), baiduAIProperties.getSecretKey());
//        ChatResponse response = qianfan.chatCompletion()
//                .model(baiduAIProperties.getQianfanModel())
//                .addMessage("user", prompt)
//                .temperature(0.7)
//                .maxOutputTokens(2000)
//                .responseFormat("json_object")
//                .execute();
//        String result = response.getResult();
//        System.out.println(result);

        return content;
    }

}